//
//  SFExpandableTableViewCell.h
//  TableViewFramework
//
//  Created by 支晓辉 on 16/3/30.
//  Copyright © 2016年 wishselfly. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "SFMovableTableViewCell.h"
#import "SFMyMovableView.h"
#import "SFGroup.h"

#define MOVABLE_VIEW SFMyMovableView

/** 分割线的高度 */
FOUNDATION_EXTERN const CGFloat kSepLineHeight;

@interface SFExpandableTableViewCell : SFMovableTableViewCell
/** 标题 */
@property (nonatomic) NSString *title;
/** 对应的子组数据 */
@property (strong, nonatomic) SFGroup *groupData;

#pragma mark - Static methods
#pragma mark -

/**
 *  用于计算当前cell的高度
 *
 *  @param group cell的数据模型
 *
 */
+ (CGFloat)calcRowHeightWithGroup:(SFGroup*)group;

#pragma mark - Instance methods
#pragma mark -

/**
 *  获取索引的视图
 *
 *  @param index 目标索引
 *
 */
- (MOVABLE_VIEW *)movableViewAtIndex:(NSInteger)index;

/**
 *  更新子视图的布局
 *
 *  @param animated 是否动画更新
 */
- (void)updateChildrenLayoutWithAnimation:(BOOL)animated;

/**
 *  更新子视图的布局
 *  @param animated         是否动画执行
 *  @param otherAnimation   其它动画的block
 *  @param completeBlock    动画完成的时候调用的方法( <b>只有动画为<u>YES</u>才有效</b> )
 */
- (void)updateChildrenLayoutWithAnimation:(BOOL)animated otherAnimation:(void (^)())otherAnimation complete:(void (^)(BOOL finished))completeBlock;

#pragma mark - Movable view

#pragma mark Control

/**
 *  插入一个新的数据
 *
 *  @param index    插入到的索引
 *  @param item     插入的数据模型
 *  @param animated 是否动画插入
 */
- (void)insertDataAt:(NSInteger)index data:(SFGroupItem*)item animated:(BOOL)animated complete:(void (^)())completeBlock;

/**
 *  移动一行的数据的位置
 *
 *  @param srcIndex  开始移动的索引
 *  @param destIndex 移动到的目标位置的索引
 *  @param animated  是否动画移动
 */
- (void)moveDataFrom:(NSInteger)srcIndex to:(NSInteger)destIndex animated:(BOOL)animated complete:(void (^)())completeBlock;

/**
 *  删除某一行的数据
 *
 *  @param index    要删除的目的行索引
 *  @param animated 是否动画删除
 */
- (void)deleteDataAt:(NSInteger)index animated:(BOOL)animated;

#pragma mark Check intersection rect

/**
 *  获取当前外部rect是否跟本视图内的行数据相交，相交的话则返回索引，否则返回-1
 *
 *  @param screenRect 需要对比的rect
 *  @param item       需要过滤掉的item
 *
 */
- (NSInteger)intersectMovableViewRectWith:(CGRect)screenRect filterItem:(SFGroupItem*)item;

/**
 *  通过点获取点所对应的视图
 *
 *  @param pt 必须是相对于keyWindow的位置
 *
 *  @return 如果没有找到则返回nil
 */
- (MOVABLE_VIEW *)getMovableViewByPoint:(CGPoint)pt;

/**
 *  结束高亮模式
 */
- (void)endHighLight;

@end
